{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "38dde73f-01ab-42e1-9e6e-4ba5f18e0623",
   "metadata": {},
   "source": [
    "# 构造微调训练数据集\n",
    "\n",
    "借助 ChatGPT 和 GPT API 我们可以实现自动化批量构造训练数据集。\n",
    "\n",
    "下面我们以中国古典哲学数据集为例，展示了自动构造训练集的主要流程：\n",
    "\n",
    "- 使用 LangChain 构造训练数据样例\n",
    "    - 基于 ChatGPT 设计 `System Role` 提示词\n",
    "    - 使用 `OpenAI GPT-3.5-Turbo-1106` 生成基础数据\n",
    "    - 解析 OpenAI GPT 生成的训练数据\n",
    "    - 持久化存储`dataset.csv`训练数据集文件\n",
    "    - 使用 ChatGPT 实现训练数据多样化\n",
    "- 自动化批量生成训练数据集\n",
    "    - 整理收集原始数据`raw_data.txt`\n",
    "    - 自动解析原始数据样例 `raw_data_content[]`\n",
    "    - 设计 `gen_data` 训练数据生成器函数\n",
    "    - 设计训练数据生成流水线\n",
    "\n",
    "最佳实践参考：\n",
    "\n",
    "- 使用 GPT-3.5 生成基础数据：https://platform.openai.com/playground/p/2c7XNPgo6Y2iDxILiWfD3iPu?model=gpt-3.5-turbo-1106&mode=chat\n",
    "- 使用 ChatGPT 生成数据处理代码和相关文本整理：https://chat.openai.com/share/cdfd2d1d-a75e-4cee-be49-539c010ca1b1\n",
    "- GPT API 价格: https://openai.com/pricing"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "18380fa5-6b34-44eb-ba8c-f4fc7ff41e9c",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "## 使用 OpenAI \bSDk 构造训练数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f84be8c1-128b-4763-aae6-b143de572796",
   "metadata": {},
   "outputs": [],
   "source": [
    "from openai import OpenAI\n",
    "client = OpenAI()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d0c8f9e7-ef2c-400d-b194-a31806f0fa91",
   "metadata": {},
   "outputs": [],
   "source": [
    "response = client.chat.completions.create(\n",
    "  model=\"gpt-3.5-turbo-1106\",\n",
    "  messages=[\n",
    "    {\n",
    "      \"role\": \"system\",\n",
    "      \"content\": \"你是中国古典哲学大师，尤其擅长周易的哲学解读。\\n\\n接下来，你收到的都是关于周易卦象的解释，你需要整理润色，并生成用于大模型训练的内容和格式。\\n\\n示例输入：\\n\\n师卦，此卦是异卦相叠，下卦为坎，上卦为坤。“师”指军队。坎为水、为险；坤为地、为顺，喻寓兵于农。兵凶战危，用兵乃圣人不得已而为之，但它可以顺利无阻碍地解决矛盾，因为顺乎形势，师出有名，故能化凶为吉。占得此卦，对于军事上率师出征非常有利，必无灾祸。师卦是天马出群之卦，以寡伏众之象。\\n师卦位于讼卦之后，《序卦》之中这样解释道：“讼必有众起，故受之以师。师者，众也。”争讼的人越来越多，以致形成了军队。\\n\\n期待结果：\\n\\ncontent:\\\"师卦\\\"\\nsummary:\\\"在周易中，师卦是一个极具深意的卦象，它由两个异卦相叠组成：下卦坎（水）和上卦坤（地）。这一卦象代表“师”，即军队，寓意着兵力和农力的结合。在这里，坎卦象征着水和险难，而坤卦象征着地和顺从，暗示着通过将军事力量安置于民间，可以在必要时顺利调动。\\n\\n师卦的核心哲学是：虽然兵力代表着危险和战争，但其使用应当是圣人不得已而为之的最后手段。在正确的情况下，军事力量可以顺应形势，将危险转化为吉祥。因此，在军事策略上，此卦象征着出征将会顺利，无灾祸。\\n\\n师卦紧随讼卦（争讼卦），在《序卦》中解释为“讼必有众起，故受之以师”。这意味着争端激化至众多人群的参与，形成了类似军队的集体力量。\\\"\"\n",
    "    },\n",
    "    {\n",
    "      \"role\": \"user\",\n",
    "      \"content\": \"蒙卦是教育启蒙的智慧，艮为山，坎为泉，山下出泉。泉水始流出山，则必将渐汇成江河,正如蒙稚渐启，又山下有险，因为有险停止不前，所以蒙昧不明。事物发展的初期阶段，必然蒙昧，所以教育是当务之急，养学生纯正无邪的品质，是治蒙之道。\\n蒙卦，这个卦是异卦相叠，下卦为坎，上卦为艮。艮是山的形象，喻止；坎是水的形象，喻险。卦形为山下有险，仍不停止前进，是为蒙昧，故称蒙卦。但因把握时机，行动切合时宜;因此，具有启蒙和通达的卦象。\\n《蒙》卦是《屯》卦这个始生卦之后的第二卦。《序卦》中说：“物生必蒙，故受之以蒙。蒙者，蒙也，特之稚也。”物之幼稚阶段，有如蒙昧未开的状态，在人则是指童蒙。\\n《象》中这样解释蒙卦：山下出泉，蒙；君子以果行育德。\"\n",
    "    },\n",
    "    {\n",
    "      \"role\": \"assistant\",\n",
    "      \"content\": \"content:\\\"蒙卦\\\"\\nsummary:\\\"在周易中，蒙卦象征着教育启蒙和智慧的初期阶段，由两个异卦相叠组成：下卦坎（水）和上卦艮（山）。坎象征水，艮象征山，代表了山下有水源，水流出山。这预示着在事物发展的起初阶段，人们会陷入蒙昧状态，因此教育成为当务之急。只有培养纯正无邪的品质，才能走上通达之路，如同泉水汇成江河。\\n\\n蒙卦的核心哲学是：事物发展的初期阶段必然处于蒙昧状态，但如果能把握时机，行动切合时宜，就能启蒙通达。蒙卦紧随始生卦《屯》之后，《序卦》中解释道：“物生必蒙，故受之以蒙。蒙者，蒙也，特之稚也。”这说明物在幼稚阶段都会经历蒙昧状态，找它蒙即是稚嫩。\\n\\n《象》中解释说：山下出泉，蒙；君子以果行育德，意味着像泉水从山下流出一样，启蒙教育有助于培育美德。\\\"\"\n",
    "    },\n",
    "    {\n",
    "      \"role\": \"user\",\n",
    "      \"content\": \"需卦，本卦是异卦相叠，上卦为坎，下卦为乾。乾卦象征天空辽阔，坎卦象征乌云密布。雨水之于传统农业社会而言，是最大的需求，因此用这个意象来表现。古人引申为雨将下，万物皆待，所以叫需。\\n需，古体字结构是“雨上天下”，从雨而声。如苍天下雨，滋养万物及人。从人的角度看，天下雨，则不易出行耕作，因此在家喝酒吃肉、静待天时。所以，这一卦的基本象征就是等待、不进，还有饮食之义。\\n \\n需卦位于蒙卦之后，《序卦》之中这样解释道：“物稚不可不养也，故受之以需。需者，饮食之道也。”有所需要，也是有所等待。\\n《象》曰：云上于天，需;君子以饮食宴乐。\\n《象》中这段话的意思是说：需卦的卦象是乾(天)下坎(水)上，为水在天上之表象。水汽聚集天上成为云层，密云満天，但还没有下雨，需要等待;君子在这个时候需要吃喝，饮酒作乐，即在等待的时候积蓄力量。\\n需卦象征等待，启示人们守正待机的道理，属于中上卦。《象》这样评断此卦：明珠土埋日久深，无光无亮到如今，忽然大风吹土去，自然显露有重新。\\n\"\n",
    "    },\n",
    "    {\n",
    "      \"role\": \"assistant\",\n",
    "      \"content\": \"content:\\\"需卦\\\"\\nsummary:\\\"在周易中，需卦是一个富有深意的卦象，由两个异卦相叠组成：下卦乾（天）和上卦坎（水）。乾象征广阔的天空，而坎象征乌云密布，暗示着迫切需要雨水的意象。古人将雨水视为万物生长的必需，因此命名为“需”。需卦的基本象征是等待和饮食之道。\\n\\n需卦位于蒙卦之后，《序卦》中解释为“物稚不可不养也，故受之以需。需者，饮食之道也。”说明物在幼稚状态需要得到滋养，因此受到需卦的启示。《象》中描述：云上于天，需；君子以饮食宴乐。意味着天空乌云密布，需要等待雨水，而君子则在等待的过程中积蓄力量，享受饮食和欢乐。\\n\\n需卦的核心哲学是：等待，启示着守正待机的道理。它属于中上卦，象征着埋藏已久的明珠，经过大风吹去尘埃后，重新显露光芒。\\\"\"\n",
    "    }\n",
    "  ],\n",
    "  temperature=1,\n",
    "  max_tokens=4095,\n",
    "  top_p=1,\n",
    "  frequency_penalty=0,\n",
    "  presence_penalty=0\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2e0d4a01-ba68-47ad-b32e-ca3ed609c02d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "5cad327e-e725-4258-a0d4-5937929074ca",
   "metadata": {},
   "source": [
    "## 使用 LangChain 构造训练数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f3224fa1-16bb-4526-9f3d-1d731376f1f3",
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The class `ChatOpenAI` was deprecated in LangChain 0.1.0 and will be removed in 0.2.0. Use langchain_openai.ChatOpenAI instead.\n",
      "  warn_deprecated(\n",
      "WARNING! top_p is not default parameter.\n",
      "                    top_p was transferred to model_kwargs.\n",
      "                    Please confirm that top_p is what you intended.\n",
      "WARNING! frequency_penalty is not default parameter.\n",
      "                    frequency_penalty was transferred to model_kwargs.\n",
      "                    Please confirm that frequency_penalty is what you intended.\n",
      "WARNING! presence_penalty is not default parameter.\n",
      "                    presence_penalty was transferred to model_kwargs.\n",
      "                    Please confirm that presence_penalty is what you intended.\n"
     ]
    }
   ],
   "source": [
    "from langchain.chat_models import ChatOpenAI\n",
    "from langchain.schema import HumanMessage, SystemMessage\n",
    "from langchain.prompts.chat import (\n",
    "    ChatPromptTemplate,\n",
    "    HumanMessagePromptTemplate,\n",
    "    SystemMessagePromptTemplate,\n",
    ")\n",
    "\n",
    "chat = ChatOpenAI(model=\"gpt-3.5-turbo-1106\",\n",
    "                  temperature=1,\n",
    "                  max_tokens=4095,\n",
    "                  top_p=1,\n",
    "                  frequency_penalty=0,\n",
    "                  presence_penalty=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "43a07901-59b3-4290-97dc-8dfd948f8f14",
   "metadata": {},
   "outputs": [],
   "source": [
    "system_content = \"\"\"\n",
    "你是中国古典哲学大师，尤其擅长周易的哲学解读。\n",
    "\n",
    "接下来，你收到的都是关于周易卦象的解释，你需要整理润色，并生成用于大模型训练的内容和格式。\n",
    "\n",
    "示例输入：\n",
    "\n",
    "师卦，此卦是异卦相叠，下卦为坎，上卦为坤。“师”指军队。坎为水、为险；坤为地、为顺，喻寓兵于农。兵凶战危，用兵乃圣人不得已而为之，但它可以顺利无阻碍地解决矛盾，因为顺乎形势，师出有名，故能化凶为吉。占得此卦，对于军事上率师出征非常有利，必无灾祸。师卦是天马出群之卦，以寡伏众之象。\n",
    "师卦位于讼卦之后，《序卦》之中这样解释道：“讼必有众起，故受之以师。师者，众也。”争讼的人越来越多，以致形成了军队。\n",
    "\n",
    "期待结果：\n",
    "\n",
    "content:\"师卦\"\n",
    "summary:\"在周易中，师卦是一个极具深意的卦象，它由两个异卦相叠组成：下卦坎（水）和上卦坤（地）。这一卦象代表“师”，即军队，寓意着兵力和农力的结合。在这里，坎卦象征着水和险难，而坤卦象征着地和顺从，暗示着通过将军事力量安置于民间，可以在必要时顺利调动。\n",
    "\n",
    "师卦的核心哲学是：虽然兵力代表着危险和战争，但其使用应当是圣人不得已而为之的最后手段。在正确的情况下，军事力量可以顺应形势，将危险转化为吉祥。因此，在军事策略上，此卦象征着出征将会顺利，无灾祸。\n",
    "\n",
    "师卦紧随讼卦（争讼卦），在《序卦》中解释为“讼必有众起，故受之以师”。这意味着争端激化至众多人群的参与，形成了类似军队的集体力量。\"\n",
    "\"\"\"\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4678fd0d-147a-4bca-ab12-1cd4c15a700b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 原始数据\n",
    "raw_content = \"蒙卦是教育启蒙的智慧，艮为山，坎为泉，山下出泉。泉水始流出山，则必将渐汇成江河,正如蒙稚渐启，又山下有险，因为有险停止不前，所以蒙昧不明。事物发展的初期阶段，必然蒙昧，所以教育是当务之急，养学生纯正无邪的品质，是治蒙之道。\\n蒙卦，这个卦是异卦相叠，下卦为坎，上卦为艮。艮是山的形象，喻止；坎是水的形象，喻险。卦形为山下有险，仍不停止前进，是为蒙昧，故称蒙卦。但因把握时机，行动切合时宜;因此，具有启蒙和通达的卦象。\\n《蒙》卦是《屯》卦这个始生卦之后的第二卦。《序卦》中说：“物生必蒙，故受之以蒙。蒙者，蒙也，特之稚也。”物之幼稚阶段，有如蒙昧未开的状态，在人则是指童蒙。\\n《象》中这样解释蒙卦：山下出泉，蒙；君子以果行育德。\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "dd57faee-81cf-4fd9-ad90-cc1583cfa32a",
   "metadata": {},
   "outputs": [],
   "source": [
    "messages = [\n",
    "    SystemMessage(\n",
    "        content=system_content\n",
    "    ),\n",
    "    HumanMessage(\n",
    "        content=raw_content\n",
    "    ),\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "19eec711-faa3-463a-8e5f-a100696491eb",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    }
   ],
   "source": [
    "ai_message = chat(messages)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15df67cd-3dab-4c54-a4f2-0b14c0c52953",
   "metadata": {},
   "source": [
    "### 解析 OpenAI GPT 生成的训练数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "ea3d3181-fd27-4d4f-a305-98c295b4317b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'content:\"蒙卦\"\\nsummary:\"在周易中，蒙卦代表着教育的启蒙智慧。它由两个异卦相叠组成：下卦坎（水）和上卦艮（山）。艮为山的形象，意味着停止；坎为水的形象，意味着险难。卦形为山下有险，却仍然不停止前进，象征着蒙昧的状态，因此得名蒙卦。然而，通过把握时机，行动与时俱进，蒙卦具有启蒙和通达的卦象。\\n\\n蒙卦在《序卦》中位于始生卦《屯》之后，解释为“物生必蒙，故受之以蒙。蒙者，蒙也，特之稚也。”意味着万物在幼稚阶段都处于蒙昧未开的状态，而人类则特指儿童的启蒙阶段。\\n\\n《象》中解释蒙卦为“山下出泉，蒙；君子以果行育德”，意味着像泉水从山下涌出一样，启蒙过程就像是培育品德的过程，需要果断的行动。\"\\n'"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ai_message.content"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "2564444f-e237-425b-adc4-429115bb86dd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 蒙卦\n",
      "Summary: 在周易中，蒙卦代表着教育的启蒙智慧。它由两个异卦相叠组成：下卦坎（水）和上卦艮（山）。艮为山的形象，意味着停止；坎为水的形象，意味着险难。卦形为山下有险，却仍然不停止前进，象征着蒙昧的状态，因此得名蒙卦。然而，通过把握时机，行动与时俱进，蒙卦具有启蒙和通达的卦象。\n",
      "\n",
      "蒙卦在《序卦》中位于始生卦《屯》之后，解释为“物生必蒙，故受之以蒙。蒙者，蒙也，特之稚也。”意味着万物在幼稚阶段都处于蒙昧未开的状态，而人类则特指儿童的启蒙阶段。\n",
      "\n",
      "《象》中解释蒙卦为“山下出泉，蒙；君子以果行育德”，意味着像泉水从山下涌出一样，启蒙过程就像是培育品德的过程，需要果断的行动。\n"
     ]
    }
   ],
   "source": [
    "text = ai_message.content\n",
    "\n",
    "# 分割字符串来找到content和summary的位置\n",
    "content_start = text.find('content:\"') + len('content:\"')\n",
    "content_end = text.find('\"\\nsummary:')\n",
    "summary_start = text.find('summary:\"') + len('summary:\"')\n",
    "summary_end = text.rfind('\"')\n",
    "\n",
    "# 提取并存储content和summary\n",
    "content = text[content_start:content_end].strip()\n",
    "summary = text[summary_start:summary_end].strip()\n",
    "\n",
    "print(\"Content:\", content)\n",
    "print(\"Summary:\", summary)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ba36506e-2871-4ad9-b928-ec9338969ce9",
   "metadata": {},
   "source": [
    "### 持久化存储训练数据集文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "d9fa000b-c4d4-41d2-94cf-7564e8dad87f",
   "metadata": {},
   "outputs": [],
   "source": [
    "import csv\n",
    "\n",
    "# 如果没有GPT API，可以使用预定义的变量\n",
    "# content = \"蒙卦\"\n",
    "# summary = \"在周易中，师卦是一个极具深意的卦象，它由两个异卦相叠组成：下卦坎（水）和上卦坤（地）。这一卦象代表“师”，即军队，寓意着兵力和农力的结合。在这里，坎卦象征着水和险难，而坤卦象征着地和顺从，暗示着通过将军事力量安置于民间，可以在必要时顺利调动。师卦的核心哲学是：虽然兵力代表着危险和战争，但其使用应当是圣人不得已而为之的最后手段。在正确的情况下，军事力量可以顺应形势，将危险转化为吉祥。因此，在军事策略上，此卦象征着出征将会顺利，无灾祸。师卦紧随讼卦（争讼卦），在《序卦》中解释为“讼必有众起，故受之以师”。这意味着争端激化至众多人群的参与，形成了类似军队的集体力量。\"\n",
    "\n",
    "# 新建CSV文件并写入数据\n",
    "with open('test_dataset.csv', mode='w', newline='', encoding='utf-8') as file:\n",
    "    writer = csv.writer(file)\n",
    "    # 写入标题行\n",
    "    writer.writerow(['content', 'summary'])\n",
    "    # 写入数据行\n",
    "    writer.writerow([content, summary])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e6e2e4ed-08a2-4e9d-ba18-d55685d44df3",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "df4aed7d-f597-46c5-a25e-960fd731bb3c",
   "metadata": {},
   "source": [
    "### 数据增强：构造多样化的提问方式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "6b335c84-e0ee-49a3-bca9-d45d1701bde4",
   "metadata": {},
   "outputs": [],
   "source": [
    "def generate_question_summary_pairs(content, summary):\n",
    "    \"\"\"\n",
    "    生成20对提问和总结的配对。\n",
    "\n",
    "    :param content: 内容（例如：“蒙卦”）。\n",
    "    :param summary: 内容的总结。\n",
    "    :return: 包含20对提问和总结的列表。\n",
    "    \"\"\"\n",
    "    # 20种提问模板\n",
    "    question_templates = [\n",
    "        \"{}代表什么？\",\n",
    "        \"周易中的{}含义是什么？\",\n",
    "        \"请解释一下{}。\",\n",
    "        \"{}在周易中是什么象征？\",\n",
    "        \"周易{}的深层含义是什么？\",\n",
    "        \"{}和教育启蒙有什么联系？\",\n",
    "        \"周易的{}讲述了什么？\",\n",
    "        \"{}是怎样的一个卦象？\",\n",
    "        \"{}在周易中怎样表达教育的概念？\",\n",
    "        \"{}的基本意义是什么？\",\n",
    "        \"周易中{}的解释是什么？\",\n",
    "        \"{}在周易中代表了哪些方面？\",\n",
    "        \"{}涉及哪些哲学思想？\",\n",
    "        \"周易中{}的象征意义是什么？\",\n",
    "        \"{}的主要讲述内容是什么？\",\n",
    "        \"周易{}的核心思想是什么？\",\n",
    "        \"{}和启蒙教育之间有何联系？\",\n",
    "        \"在周易中，{}象征着什么？\",\n",
    "        \"请描述{}的含义。\",\n",
    "        \"{}在周易哲学中扮演什么角色？\"\n",
    "    ]\n",
    "\n",
    "    # 使用content填充提问模板\n",
    "    questions = [template.format(content) for template in question_templates]\n",
    "\n",
    "    # 创建提问和总结的配对\n",
    "    question_summary_pairs = [(question, summary) for question in questions]\n",
    "\n",
    "    return question_summary_pairs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "05349693-61a9-4557-ba9a-c0f4ff24a1ac",
   "metadata": {},
   "outputs": [],
   "source": [
    "import csv\n",
    "\n",
    "# 如果没有GPT API，可以使用预定义的变量\n",
    "# content = \"蒙卦\"\n",
    "# summary = \"在周易中，师卦是一个极具深意的卦象，它由两个异卦相叠组成：下卦坎（水）和上卦坤（地）。这一卦象代表“师”，即军队，寓意着兵力和农力的结合。在这里，坎卦象征着水和险难，而坤卦象征着地和顺从，暗示着通过将军事力量安置于民间，可以在必要时顺利调动。师卦的核心哲学是：虽然兵力代表着危险和战争，但其使用应当是圣人不得已而为之的最后手段。在正确的情况下，军事力量可以顺应形势，将危险转化为吉祥。因此，在军事策略上，此卦象征着出征将会顺利，无灾祸。师卦紧随讼卦（争讼卦），在《序卦》中解释为“讼必有众起，故受之以师”。这意味着争端激化至众多人群的参与，形成了类似军队的集体力量。\"\n",
    "pairs = generate_question_summary_pairs(content, summary)\n",
    "\n",
    "# 将结果写入CSV文件\n",
    "with open('test_dataset.csv', mode='w', newline='', encoding='utf-8') as file:\n",
    "    writer = csv.writer(file)\n",
    "    writer.writerow(['content', 'summary'])\n",
    "    for pair in pairs:\n",
    "        writer.writerow(pair)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3825a610-a117-4f76-ad6f-35a491aeec24",
   "metadata": {},
   "source": [
    "## 自动化批量生成训练数据流水线\n",
    "\n",
    "原始数据来源：https://www.zhouyi.cc/zhouyi/yijing64/4103.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "fd387396-25b6-48ef-b510-bb3906ba52d4",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 初始化一个空列表用于存储原始内容数据\n",
    "raw_content_data = []\n",
    "\n",
    "# 读取文件并分割数据样例\n",
    "with open('data/raw_data.txt', 'r', encoding='utf-8') as file:\n",
    "    content = file.read()\n",
    "    # 使用连续的换行符('\\n\\n')作为分隔符来分割文本\n",
    "    data_samples = content.split('\\n\\n')\n",
    "\n",
    "    # 遍历分割后的数据样例并添加到列表中\n",
    "    for sample in data_samples:\n",
    "        # 移除每个样例中的额外空白字符（如果有的话）\n",
    "        cleaned_sample = sample.strip()\n",
    "        # 仅添加非空样例\n",
    "        if cleaned_sample:\n",
    "            raw_content_data.append(cleaned_sample)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "ed7f642e-d5de-4d19-8c16-07240daf70df",
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "样例 1:\n",
      "蒙卦原文\n",
      "蒙。亨。匪我求童蒙，童蒙求我。初筮告，再三渎，渎则不告。利贞。\n",
      "象曰：山下出泉，蒙。君子以果行育德。\n",
      "白话文解释\n",
      "蒙卦：通泰。不是我有求于幼稚愚昧的人，而是幼稚愚昧的人有求于我。第一次占筮，神灵告诉了他。轻慢不敬的再三占筮，轻慢不敬的占筮，神灵就不会告诉他。但还是吉利的卜问。\n",
      "《象辞》说：上卦为艮，象征山；下卦为坎，象征泉。山下有泉，泉水喷涌而出，这是蒙卦的卦象。君子观此卦象，取法于一往无前的山泉，从而以果敢坚毅的行动来培养自身的品德。\n",
      "《断易天机》解\n",
      "蒙卦艮上坎下，为离宫四世卦。蒙即蒙昧，主回还往复，疑惑不前，多忧愁过失，乃是凶卦。\n",
      "北宋易学家邵雍解\n",
      "智慧未开，蒙昧闭塞；犹豫不决，缺乏果断。\n",
      "得此卦者，智慧犹如童蒙，不辨是非，迷失方向；若能顺贤师良友之教，启其聪明则亨通。\n",
      "台湾国学大儒傅佩荣解\n",
      "时运：蓄积德行，出而用世。\n",
      "财运：矿山生意，果决则吉。\n",
      "家宅：君子居吉；婚姻之始。\n",
      "身体：驱去邪热，可保平安。\n",
      "传统解卦\n",
      "这个卦是异卦（下坎上艮）相叠，艮是山的形象，喻止；坎是水的形象，喻险。卦形为山下有险，仍不停止前进，是为蒙昧，故称蒙卦。但因把握时机，行动切合时宜，因此，具有启蒙和通达的卦象。\n",
      "大象：蒙者，昏而无所见也，故宜「启蒙」。\n",
      "运势：初时迷惑不知方向，须忍耐待机而动，凡事多听取别人意见，则运可通。\n",
      "事业：事业开始，混乱无序，危机四伏，以勇敢坚毅的行动可以扭转局面。然而必须接受严格教育，培养这种奋发图强的精神。务必脚踏实地，最忌好高骛远，否则会陷入孤立无援的境地。\n",
      "经商：务必小心谨慎，不得急功近利，尤其应树立高尚的商业道德，以良好的信誉提高竞争力而取胜。\n",
      "求名：必须接受良好的基础教育，陶冶情操。且动机纯正，可以达到目的。\n",
      "婚恋：注意考察对方品德，不可以金钱为诱铒。夫妻需相互宽容、理解。\n",
      "决策：有时会陷入迷惘困顿的境地，加上胆小、不果断，往往误事。如能接受长辈的教诲，甚至严酷的考验，抛弃疑惧的心理，等待适当时机，必然一帆风顺。\n",
      "------\n",
      "样例 2:\n",
      "屯卦原文\n",
      "屯。元，亨，利，贞。勿用，有攸往，利建侯。\n",
      "象曰：云，雷，屯；君子以经纶。\n",
      "白话文解释\n",
      "屯卦。大吉大利，吉利的占卜。不利于出门。有利于建国封侯。\n",
      "《象辞》说：屯的上卦为坎，坎为云，下卦为震，震为雷。云行于上，雷动于下，是屯卦的卦象。君子观此卦象，取法于云雷，用云的恩泽，雷的威严来治理国事。\n",
      "《断易天机》解\n",
      "屯卦坎上震下，为坎宫二世卦。屯说明有困难，又象征动而逢险境，需刚毅果敢方为吉。\n",
      "北宋易学家邵雍解\n",
      "万物始生，开始困难；先劳后逸，苦尽甘来。\n",
      "得此卦者，身处困境，宜守不宜进，须多加辛苦努力，排除困难，方可通达，有初难后解之象。\n",
      "台湾国学大儒傅佩荣解\n",
      "时运：宜守不宜进。\n",
      "财运：创业维艰。\n",
      "家宅：修缮住宅；初婚不和。\n",
      "身体：保存元气。\n",
      "传统解卦\n",
      "这个卦是异卦（下震上坎）相叠，震为雷，喻动；坎为雨，喻险。雷雨交加，险象丛生，环境恶劣。“屯”原指植物萌生大地，万物始生，充满艰难险阻，然而顺时应运，必欣欣向荣。\n",
      "大象：屯者难也，万事欲进而不得进。\n",
      "运势：身处困境，步步为营，有初难后解之意。\n",
      "事业：起初多有不利，要知难而进，小心翼翼，勇往直前，灵活机动，可望获得大的成功，时机到来时一定要抓住，却也不得操之太急，且仍有困难，务必有他人相助，故平时应多施恩惠。\n",
      "经商：创业初期步履艰难，多有挫折。坚定信念最重要，不要为表面现象所迷惑，应积极进取，行动果断，打开出路。若仍无法摆脱困境，则应退守保全，等待机会，再展宏图。\n",
      "求名：积极争取，主动追求，可以成功。\n",
      "婚恋：好事多磨，忠贞纯洁，大胆追求，能够成功，婚姻美满。\n",
      "决策：初始困难，但若具有坚忍不拔的毅力和锲而不舍的奋斗精神，前途不可估量，但往往不为他人理解而陷于孤独苦闷，事业会因此处于困难状态，需要得到贤德之人的帮助才能摆脱。如能以乐观主义精神处世，能取得成就。\n",
      "------\n",
      "样例 3:\n",
      "需卦原文\n",
      "需。有孚，光亨，贞吉。利涉大川。\n",
      "象曰：云上于天，需；君子以饮食宴乐。\n",
      "白话文解释\n",
      "需卦：抓到俘虏。大吉大利，吉利的卜问。有利于涉水渡河。\n",
      "《象辞》说：需的上卦为坎，表示云；下卦为乾，表示天。云浮聚于天上，待时降雨是需卦的卦象。君子观此卦象，可以宴饮安乐，待时而动。\n",
      "《断易天机》解\n",
      "需卦坎上乾下，为坤宫游魂卦。需为踌躇、期待，虽然刚强，但前面有险阻，应当等待，涉大川则利。\n",
      "北宋易学家邵雍解\n",
      "坎陷当前，遇阻不进；大器晚成，收成在后。\n",
      "得此卦者，时机尚未成熟，需要耐心等待，急进反会见凶。\n",
      "台湾国学大儒傅佩荣解\n",
      "时运：时机尚未成熟，耐心等待。\n",
      "财运：资本未集，无法开张。\n",
      "家宅：平安是福。\n",
      "身体：调节饮食，健康有望。\n",
      "传统解卦\n",
      "这个卦是异卦（下乾上坎）相叠，下卦是乾，刚健之意；上卦是坎，险陷之意。以刚逢险，宜稳健之妥，不可冒失行动，观时待变，所往一定成功。\n",
      "大象：云登天上而未雨，不能急进，等待时机之象。\n",
      "运势：智者必须待时而行，急进反见凶险。\n",
      "事业：关键在于审时度势，耐心等待，事成于安祥，切勿冒险，欲速不达。自己要充满自信，临危不惧，坚守中正，必可化险为夷。情况有利时，仍得居安思危。\n",
      "经商：行动之初，情况困难，必须以极大的耐心，创造条件和机会，行事光明磊落，观时待变，实现愿望。事情接近成功时，更应小心谨慎，切莫功亏一篑。\n",
      "求名：时机尚不成熟，应耐心等待。这时应坚定信念，不为闲言流语所动摇，努力丰富自己，再求助可靠的人便可成功。\n",
      "婚恋：慎重，切不可草率行事，逐渐培养感情，以诚实、热情相待，会发生变故，仍可以有良好的结局。双方都应懂得以柔克刚的道理。\n",
      "决策：前途光明，有雄心大志，且可实现。为此需要积蓄实力，等待时机，大器晚成。本人具有坚强的意志，冷静的头脑。前进途中会遇到困难和险阻，必须十分谨慎，坦然对待小人的中伤，在灾祸在面前能镇静自若。不轻举妄动，冷静选择方向。为人谦和、坦率，多有他人相助，促使事业成功。当时机成熟后，必然一帆风顺。\n",
      "------\n",
      "样例 4:\n",
      "讼卦原文\n",
      "讼。有孚，窒惕，中吉，终凶。利见大人，不利涉大川。\n",
      "象曰：天与水违行，讼。君子以做事谋始。\n",
      "白话文解释\n",
      "讼卦：虽有利可图(获得俘虏)，但要警惕戒惧。其事中间吉利，后来凶险。占筮得此爻，有利于会见贵族王公，不利于涉水渡河。\n",
      "《象辞》说：上卦为乾，乾为天；下卦为坎，坎为水，天水隔绝，流向相背，事理乖舛，这是讼卦的卦象。君子观此卦象，以杜绝争讼为意，从而在谋事之初必须慎之又慎。\n",
      "《断易天机》解\n",
      "讼卦乾上坎下，为离宫游魂卦。上乾为刚，下坎为险，一方刚强，一方阴险，必然产生争论，因此多有不吉。\n",
      "北宋易学家邵雍解\n",
      "天高水深，达远不亲；慎谋退守，敬畏无凶。\n",
      "得此卦者，身心不安，事多不顺，与他人多争诉之事，宜修身养性，谨慎处事。\n",
      "台湾国学大儒傅佩荣解\n",
      "时运：功名受阻，不宜树敌。\n",
      "财运：开始谨慎，终可获利。\n",
      "家宅：君子必求淑女。\n",
      "身体：预防胜于治疗。\n",
      "传统解卦\n",
      "这个卦是异卦（下坎上乾）相叠。同需卦相反，互为“综卦”。乾为刚健，坎为险陷。刚与险，健与险，彼此反对，定生争讼。争讼非善事，务必慎重戒惧。\n",
      "大象：乾天升于上，坎水降于下，相背而行而起讼。\n",
      "运势：事与愿违，凡事不顺，小人加害，宜防陷阱。\n",
      "事业：起初顺利，有利可图，继而受挫，务必警惕，慎之又慎，不得固执已见，极力避免介入诉讼纠纷的争执之中。与其这样，不如退而让人，求得化解，安于正理，可免除意外之灾。陷入争讼，即使获胜，最后还得失去，得不偿失。\n",
      "经商：和气生财，吃亏是福，切勿追求不义之财。商业谈判应坚持公正、公平、互利的原则，尽量避免发生冲突。这样便会有好结果。\n",
      "求名：不利。自己尚缺乏竞争实力，应坚守纯正，隐忍自励，自强自勉，切莫逞强。依靠有地位的人的帮助，及早渡过难关。\n",
      "婚恋：虽不尽人意，倒也般配，彼此理解，未尝不可。双方应以温和的方式处理生活。\n",
      "决策：争强好胜，不安于现状，为改变命运和超越他人而奋斗。头脑聪颖，反应敏捷，有贵人相助。但缺乏持之以恒的毅力，容易露出锋芒，得罪他人，带来诉讼之灾。宜承认现实，顺其自然，知足，适可而止。接受教训，引以为戒，可功成名就。\n",
      "------\n",
      "样例 5:\n",
      "师卦原文\n",
      "师。贞，丈人吉，无咎。\n",
      "象曰：地中有水，师。君子以容民畜众。\n",
      "白话文解释\n",
      "师卦：占问总指挥的军情，没有灾祸。\n",
      "《象辞》说：下卦为坎，坎为水；上卦为坤，坤为地，像“地中有水”，这是师卦的卦象。君子观此卦象，取法于容纳江河的大地，收容和畜养大众。\n",
      "《断易天机》解\n",
      "师卦坤上坎下，为坎宫归魂卦。师即兵众，只有选择德高望重的长者来统率军队，才能吉祥无咎。\n",
      "北宋易学家邵雍解\n",
      "忧劳动众，变化无穷；公正无私，排除万难。\n",
      "得此卦者，困难重重，忧心劳众，宜包容别人，艰苦努力，摒除一切困难。\n",
      "台湾国学大儒傅佩荣解\n",
      "时运：包容别人，修行待时。\n",
      "财运：有财有库，善自珍惜。\n",
      "家宅：旧亲联姻，可喜可贺。\n",
      "身体：腹胀之症，调气无忧。\n",
      "传统解卦\n",
      "这个卦是异卦（下坎上坤）相叠。“师”指军队。坎为水、为险；坤为地、为顺，喻寓兵于农。兵凶战危，用兵乃圣人不得已而为之，但它可以顺利无阻碍地解决矛盾，因为顺乎形势，师出有名，故能化凶为吉。\n",
      "大象：养兵聚众，出师攻伐之象，彼此有伤，难得安宁。\n",
      "运势：困难重重，凡事以正规行事，忌独断独行、投机取巧，提防潜在敌人。\n",
      "事业：阻力很大，困难很多，处于激烈的竞争状态，要与他人密切合作，谨小慎微，行为果断，切忌盲目妄动，适度即可，注意保全自己。机动灵活，严于律已。从容沉着对付一切，必能成功。\n",
      "经商：已有一定的积蓄，可以从事大的营销活动，但必卷入激烈商战，以刚毅顽强的精神和高尚的商业道德，辅以灵活的方法，勿贪图小利，勿掉以轻心，加强与他人的沟通，必可摆脱困境，化险为夷。\n",
      "求名：具备很好的条件，但须有正确的引导，务必严格要求自己，克服不利因素的干扰，经过扎实努力，必可名利双全。\n",
      "婚恋：慎重、专注，否则会陷入“三角”纠纷。痴情追求可以达到目的。\n",
      "决策：天资聪颖，性格灵活，具有坚强的意志，对事业执着追求，迎难而进。可成就大事业。喜竞争，善争辩，富有冒险精神，不免带来麻烦，务老成持重，不贪功，以中正为要。\n",
      "------\n"
     ]
    }
   ],
   "source": [
    "# 输出结果以验证\n",
    "for i, sample in enumerate(raw_content_data[:5]):  # 打印前5个样例以检查\n",
    "    print(f\"样例 {i+1}:\")\n",
    "    print(sample)\n",
    "    print(\"------\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7633a7be-88f2-4d59-9070-d8a08e6e909c",
   "metadata": {},
   "source": [
    "### 将以上的所有模块，整合到一起，自动化生成数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "fd5d803a-6adf-4b6b-acda-7dbb7a259f06",
   "metadata": {
    "jupyter": {
     "source_hidden": true
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The class `ChatOpenAI` was deprecated in LangChain 0.1.0 and will be removed in 0.2.0. Use langchain_openai.ChatOpenAI instead.\n",
      "  warn_deprecated(\n",
      "WARNING! top_p is not default parameter.\n",
      "                    top_p was transferred to model_kwargs.\n",
      "                    Please confirm that top_p is what you intended.\n",
      "WARNING! frequency_penalty is not default parameter.\n",
      "                    frequency_penalty was transferred to model_kwargs.\n",
      "                    Please confirm that frequency_penalty is what you intended.\n",
      "WARNING! presence_penalty is not default parameter.\n",
      "                    presence_penalty was transferred to model_kwargs.\n",
      "                    Please confirm that presence_penalty is what you intended.\n"
     ]
    }
   ],
   "source": [
    "from langchain.chat_models import ChatOpenAI\n",
    "from langchain.schema import HumanMessage, SystemMessage\n",
    "from langchain.prompts.chat import (\n",
    "    ChatPromptTemplate,\n",
    "    HumanMessagePromptTemplate,\n",
    "    SystemMessagePromptTemplate,\n",
    ")\n",
    "\n",
    "# 初始化LangChain的GPT-3.5调用\n",
    "chat = ChatOpenAI(model=\"gpt-3.5-turbo-1106\",\n",
    "                  temperature=1,\n",
    "                  max_tokens=4095,\n",
    "                  top_p=1,\n",
    "                  frequency_penalty=0,\n",
    "                  presence_penalty=0)\n",
    "\n",
    "def gen_data(raw_content):\n",
    "    \"\"\"\n",
    "    使用LangChain GPT-3.5调用处理单个数据样例。\n",
    "\n",
    "    :param raw_content: 原始数据样例。\n",
    "    :return: GPT-3.5模型生成的内容。\n",
    "    \"\"\"\n",
    "    # 系统消息定义背景和任务\n",
    "    system_message = SystemMessage(\n",
    "        content=\"\"\"\n",
    "        你是中国古典哲学大师，尤其擅长周易的哲学解读。\n",
    "\n",
    "        接下来，你收到的都是关于周易卦象的解释，你需要整理润色，并生成用于大模型训练的内容和格式。\n",
    "\n",
    "        示例输入：\n",
    "\n",
    "        师卦，此卦是异卦相叠，下卦为坎，上卦为坤。“师”指军队。坎为水、为险；坤为地、为顺，喻寓兵于农。兵凶战危，用兵乃圣人不得已而为之，但它可以顺利无阻碍地解决矛盾，因为顺乎形势，师出有名，故能化凶为吉。占得此卦，对于军事上率师出征非常有利，必无灾祸。师卦是天马出群之卦，以寡伏众之象。\n",
    "        师卦位于讼卦之后，《序卦》之中这样解释道：“讼必有众起，故受之以师。师者，众也。”争讼的人越来越多，以致形成了军队。\n",
    "\n",
    "        期待结果：\n",
    "\n",
    "        content:\"师卦\"\n",
    "        summary:\"在周易中，师卦是一个极具深意的卦象，它由两个异卦相叠组成：下卦坎（水）和上卦坤（地）。这一卦象代表“师”，即军队，寓意着兵力和农力的结合。在这里，坎卦象征着水和险难，而坤卦象征着地和顺从，暗示着通过将军事力量安置于民间，可以在必要时顺利调动。\n",
    "\n",
    "        师卦的核心哲学是：虽然兵力代表着危险和战争，但其使用应当是圣人不得已而为之的最后手段。在正确的情况下，军事力量可以顺应形势，将危险转化为吉祥。因此，在军事策略上，此卦象征着出征将会顺利，无灾祸。\n",
    "\n",
    "        师卦紧随讼卦（争讼卦），在《序卦》中解释为“讼必有众起，故受之以师”。这意味着争端激化至众多人群的参与，形成了类似军队的集体力量。\"\n",
    "        \"\"\"\n",
    "    )\n",
    "\n",
    "    # 人类消息包含原始数据样例\n",
    "    human_message = HumanMessage(\n",
    "        content=raw_content\n",
    "    )\n",
    "\n",
    "    # 构建消息列表并进行模型调用\n",
    "    messages = [system_message, human_message]\n",
    "    ai_message = chat(messages)\n",
    "\n",
    "    return ai_message.content"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "7790a03b-2fe7-445d-90d4-941d790d419b",
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "content:\"蒙卦\"\n",
      "summary:\"在周易中，蒙卦代表着通泰之象。它是由艮卦（山）上卦和坎卦（水）下卦相叠而成。蒙卦的核心意义在于强调，不是我求告于幼稚愚昧的人，而是幼稚愚昧的人向我求告。第一次占卜会得到神灵的启示，但如果轻慢不敬地再三占卜，那神灵就不会给予回应。然而，这个卦象仍然是吉利的。\n",
      "\n",
      "        蒙卦的象征意义是山下有泉，泉水喷涌而出。君子观此卦象，以果行育德，取法于一往无前的山泉，通过果敢坚毅的行动来培养自身的品德。\n",
      "\n",
      "        《断易天机》解释：蒙卦为艮卦上坎卦下，为离宫四世卦。蒙即蒙昧，主回还往复，疑惑不前，多忧愁过失，乃是凶卦。\n",
      "\n",
      "        进一步，北宋易学家邵雍解释：蒙卦象征着智慧未开，蒙昧闭塞，犹豫不决，缺乏果断。得到此卦的人，智慧犹如童蒙，不辨是非，迷失方向，然而如果能顺应贤师良友之教，启其聪明则会通达。\n",
      "\n",
      "        台湾国学大儒傅佩荣提到，时运是蓄积德行，出而用世；财运是矿山生意，果决则吉；家宅如君子居吉，婚姻之始；身体方面，要驱除邪热，可保平安。\n",
      "\n",
      "        蒙卦在传统解卦中描述为山下有险而不停止前进，强调抓住时机，切合时宜来培养通达和启蒙的卦象。运势初时迷惑不知方向，需要忍耐待机而动，多听取别人意见，才能通达。在事业、经商、求名、婚恋等方面，皆需果敢坚毅、谨慎等品质，方能有顺利发展。\"\n"
     ]
    }
   ],
   "source": [
    "# 示例调用（使用 raw_data.txt 中解析的数据样例）\n",
    "generated_content = gen_data(raw_content_data[0])\n",
    "print(generated_content)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "4e37d53c-3dd4-4494-a83f-c45786e40caa",
   "metadata": {},
   "outputs": [],
   "source": [
    "def dataset_parser(ai_message_content):\n",
    "    \"\"\"\n",
    "    解析由gen_data函数生成的ai_message.content，提取content和summary。\n",
    "\n",
    "    :param ai_message_content: gen_data函数返回的文本。\n",
    "    :return: 提取的content和summary。\n",
    "    \"\"\"\n",
    "    # 分割字符串来找到content和summary的位置\n",
    "    content_start = ai_message_content.find('content:\"') + len('content:\"')\n",
    "    content_end = ai_message_content.find('\"\\nsummary:')\n",
    "    summary_start = ai_message_content.find('summary:\"') + len('summary:\"')\n",
    "    summary_end = ai_message_content.rfind('\"')\n",
    "\n",
    "    # 提取并存储content和summary\n",
    "    content = ai_message_content[content_start:content_end].strip()\n",
    "    summary = ai_message_content[summary_start:summary_end].strip()\n",
    "\n",
    "    return content, summary\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "bc2f94fd-52d2-473e-b70a-721ab4d1f5cf",
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 蒙卦\n",
      "Summary: 在周易中，蒙卦代表着通泰之象。它是由艮卦（山）上卦和坎卦（水）下卦相叠而成。蒙卦的核心意义在于强调，不是我求告于幼稚愚昧的人，而是幼稚愚昧的人向我求告。第一次占卜会得到神灵的启示，但如果轻慢不敬地再三占卜，那神灵就不会给予回应。然而，这个卦象仍然是吉利的。\n",
      "\n",
      "        蒙卦的象征意义是山下有泉，泉水喷涌而出。君子观此卦象，以果行育德，取法于一往无前的山泉，通过果敢坚毅的行动来培养自身的品德。\n",
      "\n",
      "        《断易天机》解释：蒙卦为艮卦上坎卦下，为离宫四世卦。蒙即蒙昧，主回还往复，疑惑不前，多忧愁过失，乃是凶卦。\n",
      "\n",
      "        进一步，北宋易学家邵雍解释：蒙卦象征着智慧未开，蒙昧闭塞，犹豫不决，缺乏果断。得到此卦的人，智慧犹如童蒙，不辨是非，迷失方向，然而如果能顺应贤师良友之教，启其聪明则会通达。\n",
      "\n",
      "        台湾国学大儒傅佩荣提到，时运是蓄积德行，出而用世；财运是矿山生意，果决则吉；家宅如君子居吉，婚姻之始；身体方面，要驱除邪热，可保平安。\n",
      "\n",
      "        蒙卦在传统解卦中描述为山下有险而不停止前进，强调抓住时机，切合时宜来培养通达和启蒙的卦象。运势初时迷惑不知方向，需要忍耐待机而动，多听取别人意见，才能通达。在事业、经商、求名、婚恋等方面，皆需果敢坚毅、谨慎等品质，方能有顺利发展。\n"
     ]
    }
   ],
   "source": [
    "# 示例调用（使用假设的gen_data函数返回的文本）\n",
    "content, summary = dataset_parser(generated_content)\n",
    "print(\"Content:\", content)\n",
    "print(\"Summary:\", summary)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "716794df-b608-4cca-a45d-9c597cf2a333",
   "metadata": {},
   "outputs": [],
   "source": [
    "import csv\n",
    "import datetime\n",
    "import os\n",
    "\n",
    "def main():\n",
    "    # 确保 data 目录存在\n",
    "    if not os.path.exists('data'):\n",
    "        os.makedirs('data')\n",
    "\n",
    "    # 解析 data/raw_data.txt 得到 raw_content_data 列表\n",
    "    raw_content_data = []\n",
    "    with open('data/raw_data.txt', 'r', encoding='utf-8') as file:\n",
    "        content = file.read()\n",
    "        data_samples = content.split('\\n\\n')\n",
    "        for sample in data_samples:\n",
    "            cleaned_sample = sample.strip()\n",
    "            if cleaned_sample:\n",
    "                raw_content_data.append(cleaned_sample)\n",
    "\n",
    "    # 创建带有时间戳的CSV文件名\n",
    "    timestamp = datetime.datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n",
    "    filename = f\"data/zhouyi_dataset_{timestamp}.csv\"\n",
    "\n",
    "    # 创建CSV文件并写入标题行\n",
    "    with open(filename, mode='w', newline='', encoding='utf-8') as file:\n",
    "        writer = csv.writer(file)\n",
    "        writer.writerow(['content', 'summary'])\n",
    "\n",
    "        # 循环遍历 raw_content_data 数据样例\n",
    "        for raw_content in raw_content_data:\n",
    "            # 调用 gen_data 方法得到 ai_message_content\n",
    "            ai_message_content = gen_data(raw_content)\n",
    "\n",
    "            # 解析 ai_message_content 得到 content 和 summary\n",
    "            content, summary = dataset_parser(ai_message_content)\n",
    "            \n",
    "            print(\"Content:\", content)\n",
    "            print(\"Summary:\", summary)\n",
    "\n",
    "            # 调用 generate_question_summary_pairs 得到20组 pairs\n",
    "            pairs = generate_question_summary_pairs(content, summary)\n",
    "\n",
    "            # 将 pairs 写入 csv 文件\n",
    "            for pair in pairs:\n",
    "                writer.writerow(pair)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "c7869572-220d-4542-ab57-9d98613bbc80",
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 蒙卦\n",
      "Summary: 在周易中，蒙卦代表通泰，卜问吉利。这是一个由艮卦（山）上卦和坎卦（水）下卦组成的异卦相叠。卦辞中描述了对幼稚愚昧的人有求于我的情形，同时强调了神灵的告知需要一次就足够，如果轻慢不敬地再三占筮，神灵就不会告诉他。蒙卦的象辞中，艮卦象征着山，坎卦象征着泉水，山下有泉喷涌而出，寓意着蒙卦代表了一种果敢行动培养品德的精神。\n",
      "\n",
      "蒙卦象征着初时迷惑不知方向，需要耐心待机而动。吉凶解中表示，凡事多听取别人意见，则运可通。在事业上，必须勇敢坚毅，接受严格教育，务必脚踏实地。在经商过程中应小心谨慎，树立良好商业道德，以信誉取胜。在求名、婚恋、决策方面也都强调了谨慎，接受教育和等待适当时机的重要性。\"\n",
      "\n",
      "comment:\"非常全面的解读，包含了蒙卦的内涵、象辞、历代注解和各个方面的运势解析，可以作为大模型的训练数据。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 屯卦\n",
      "Summary: 在周易中，屯卦的卦象是由坎卦与震卦组成的异卦，坎为云，震为雷。这是一个预示困难和险境的卦象，暗示万事始生时所面临的艰难险阻，然而顺应时机则必能蓬勃发展。屯卦代表了困难之始，需要坚忍不拔的毅力和果敢的行动才能带来吉利。\n",
      "\n",
      "屯卦的核心哲学是：面临困境时，需要步步为营，勇往直前，灵活机动，方可获得成功。这是一个初难后解的卦象，表明虽然起初困难重重，但随着时机的到来，可以摆脱困境，获得成功。值得注意的是，在困难时期应多施恩惠，同时需要得到他人的协助。\n",
      "\n",
      "屯卦的卦象也与事业、经商、求名、婚姻等方面有关，主要意味着初始困难，需要坚定信念、积极进取，以及等待时机的智慧。肯定的积极性和不屈不挠的毅力将会带来美好的结果。\"\n",
      "\n",
      "reference:[\n",
      "\"《象辞》：屯的上卦为坎，坎为云，下卦为震，震为雷。云行于上，雷动于下，是屯卦的卦象。君子观此卦象，取法于云雷，用云的恩泽，雷的威严来治理国事。\",\n",
      "\"《断易天机》：屯卦坎上震下，为坎宫二世卦。屯说明有困难，又象征动而逢险境，需刚毅果敢方为吉。\",\n",
      "\"北宋易学家邵雍解：万物始生，开始困难；先劳后逸，苦尽甘来。得此卦者，身处困境，宜守不宜进，须多加辛苦努力，排除困难，方可通达，有初难后解之象。\",\n",
      "\"台湾国学大儒傅佩荣解：时运宜守不宜进，财运创业维艰，家宅修缮住宅；初婚不和，身体保存元气。\",\n",
      "\"传统解卦：这个卦是异卦（下震上坎）相叠，震为雷，喻动；坎为雨，喻险。雷雨交加，险象丛生，环境恶劣。屯原指植物萌生大地，万物始生，充满艰难险阻，然而顺时应运，必欣欣向荣。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 需卦\n",
      "Summary: 在周易卦象中，需卦是一个充满期待和等待的卦象。上卦为坎，代表云；下卦为乾，代表天。云聚天上，等待时机降雨，象征着期待和等待。这是一个大吉大利，有利于涉水渡河的卜卦，预示着需要等待时机，有耐心等待时机才能顺利过关。\n",
      "\n",
      "需卦的核心哲学是：要审时度势，急进则会陷入危险之中。只有等待时机，稳健前行，才能化解危险，取得成功。财运、家宅、身体等方面，也提示需要耐心等待时机，不可冒险行事。此卦象牵涉到智者必须待时而行的重要观念。\n",
      "\n",
      "需卦暗示着前途光明，但需要等待时机才能实现大志大愿。大器晚成，需要坚定信念，等待时机的同时不为外界所动摇。在困难面前保持冷静、坚定的意志，最终将能遇到机遇，事业有望成功。\"\n",
      "\n",
      "---\n",
      "\n",
      "content:\"需。有孚，光亨，贞吉。利涉大川。\"\n",
      "summary:\"需卦是一个预示待时而行的卜卦，预示着等待时机、有耐心等待才会顺利。这一卦象提示着大吉大利，有利于涉水渡河，意味着需要等待时机，稳健前行。\"\n",
      "---\n",
      "\n",
      "content:\"云上于天，需；君子以饮食宴乐。\"\n",
      "summary:\"需卦的象辞是云在天上。君子观此卦象，可以宴饮安乐，待时而动。这暗示着在等待时机的过程中，可以保持愉悦的心情，等待时机到来。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: \"讼卦\n",
      "Summary: \"讼卦\"\n",
      "summary: \"在周易中，讼卦是一个充满深意的卦象。它由上卦乾（天）和下卦坎（水）相叠组成。讼卦代表着争讼，预示着尽管有利可图，但必须时刻警惕戒惧。这个卦象中间吉利，但最终会带来凶险。占卜得到此卦，表示有利于会见贵族王公，但不利于涉水渡河。\"\n",
      "analysis: \"讼卦的核心哲学是乾（天）刚健与坎（水）险陷相对立，必然导致争论之事。因此，此卦象提醒人们要慎防争讼，谨慎处事。值得注意的是，避免介入争端，寻求化解、求得安定是明智之举。此卦在事业、经商、求名等方面提示要谨慎行事，避免诉讼纠纷。而在婚恋领域，则提示双方要以温和的方式处理关系。在决策方面，要警惕争强好胜带来的诉讼之灾，应接受现实，知足而止，方能功成名就。\"\n",
      "commentary: \"讼卦所蕴含的哲学思想是，乾带有决断力、坚强和刚健，而坎则意味着险陷和难以解脱。两者之间的冲突势必引发纠纷，故应该慎防争讼，避免介入纠纷，追求和解与安定。这是一种对立的相处之道，也是对争端的智慧处理。\"\n",
      "image: \"讼卦的卦象是上乾下坎，乾象征天，坎象征水。天与水相争的状态，让人联想到乖舛和争端。这是一种戒备的状态，也提示着需要冷静的思考、深远的谋划。\"\n",
      "---\n",
      "content: \"讼卦原文\"\n",
      "summary: \"《周易》中的讼卦是上乾下坎的卦象。在文中提到，虽然有利可图，但必须警惕戒惧。初期事情吉利，最终会带来凶险。建议会见贵族王公有利，但不宜涉水渡河。\"\n",
      "interpretation: \"讼卦的卦象象征着乾天升于上，坎水降于下，天水相隔，流向相背，预示着事理乖舛。这个卦的解释中强调了谨慎戒惧和避免争讼的重要性。\"\n",
      "explanation: \"讼卦在北宋时期的解释中，强调了需要谨慎处事，避免与他人争诉之事，而台湾国学大儒傅佩荣更是从时运、财运、家宅及身体等多个方面对讼卦进行了解析。传统解卦中也强调了谨慎戒惧的重要性，指出争讼非善事，务必慎重戒惧。\"\n",
      "---\n",
      "content: \"讼卦的启示\"\n",
      "summary: \"讼卦的启示是警惕戒惧，避免争讼。在事业、经商、求名和婚恋方面，都需要谨慎行事，避免介入诉讼纠纷。在决策方面，应接受现实，知足而止，方能功成名就。\"\n",
      "philosophy: \"讼卦所蕴含的哲学思想是，乾带有决断力、坚强和刚健，而坎则意味着险陷和难以解脱。讼卦提醒人们要慎防争讼，追求和解与安定。这是一种对立的相处之道，也是对争端的智慧处理。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 师卦\n",
      "Summary: 在周易中，师卦是一个极具深意的卦象，它由两个异卦相叠组成：下卦坎（水）和上卦坤（地）。这一卦象代表“师”，即军队，寓意着兵力和农力的结合。在这里，坎卦象征着水和险难，而坤卦象征着地和顺从，暗示着通过将军事力量安置于民间，可以在必要时顺利调动。\n",
      "\n",
      "师卦的核心哲学是：虽然兵力代表着危险和战争，但其使用应当是圣人不得已而为之的最后手段。在正确的情况下，军事力量可以顺应形势，将危险转化为吉祥。因此，在军事策略上，此卦象征着出征将会顺利，无灾祸。\n",
      "\n",
      "根据《象辞》，师卦之象为“地中有水”，启示君子应当像大地一样包容和畜养大众，体现了一种待人接物的胸怀和智慧。\n",
      "\n",
      "在《断易天机》中，解释指出，师卦代表着兵众，需要由德高望重的长者来统率军队，才能获得吉祥无咎的结果。\n",
      "\n",
      "各位易学家也对师卦进行了深入解读，强调了困难重重、排除万难、包容别人、忧劳动众等含义。在运势、事业、经商、求名、婚恋、决策等方面，师卦都带来了深刻的启示和建议，指引着人们如何在各种复杂的情况下行事。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: {\n",
      "  \"content\": \"比卦\",\n",
      "  \"summary\": \"在周易中，比卦是一个代表着吉利的卦象。它由下卦坤（地）和上卦坎（水）组成。比卦暗示着再次进行卜筮，依然能够得到吉祥的结果，并预示长期坚定的吉利。同时，也提醒谨防不愿臣服的邦国迟迟不来朝，可能会带来麻烦。比卦的核心哲学是：相亲相依，长期亲密，就能够无灾无咎，所以预示吉祥。先王观此卦象，取法于水附大地，地纳江河之象，封建万国，亲近诸侯。\",\n",
      "  \"interpretation\": \"比卦坎上坤下，为坤宫归魂卦。比为相亲相依附之意，长期如此，就会无咎，所以吉祥。比卦代表着平顺，身处一阳之下统管五阴，相亲相辅，和乐之象。运势方面，预示着平顺，能够得到贵人的提拔，建议在面对事务时迅速决策，不宜过于迟疑。在事业上，比卦暗示着顺利发展，可以获得他人的帮助和辅佐，需以诚实、信任的态度对待他人，向才德高尚的人士学习，听取建议。经商方面，愿望可以实现且利润丰厚，但需要与他人密切合作，真诚交往并遵守商业道德。在求名方面，有着成功的希望，更重要的是得到他人的赏识和栽培。婚姻方面，比卦预示着美好婚缘和彼此忠诚。总体而言，比卦提醒人们要心地善良，待人忠诚、厚道，乐于帮助他人，工作勤恳并善于判断是非，在交友选择上要谨慎，结交高明的朋友，会终身受益。\",\n",
      "  \"image\": \"比\"\n",
      "}\n",
      "``\n",
      "Summary: {\n",
      "  \"content\": \"比卦\",\n",
      "  \"summary\": \"在周易中，比卦是一个代表着吉利的卦象。它由下卦坤（地）和上卦坎（水）组成。比卦暗示着再次进行卜筮，依然能够得到吉祥的结果，并预示长期坚定的吉利。同时，也提醒谨防不愿臣服的邦国迟迟不来朝，可能会带来麻烦。比卦的核心哲学是：相亲相依，长期亲密，就能够无灾无咎，所以预示吉祥。先王观此卦象，取法于水附大地，地纳江河之象，封建万国，亲近诸侯。\",\n",
      "  \"interpretation\": \"比卦坎上坤下，为坤宫归魂卦。比为相亲相依附之意，长期如此，就会无咎，所以吉祥。比卦代表着平顺，身处一阳之下统管五阴，相亲相辅，和乐之象。运势方面，预示着平顺，能够得到贵人的提拔，建议在面对事务时迅速决策，不宜过于迟疑。在事业上，比卦暗示着顺利发展，可以获得他人的帮助和辅佐，需以诚实、信任的态度对待他人，向才德高尚的人士学习，听取建议。经商方面，愿望可以实现且利润丰厚，但需要与他人密切合作，真诚交往并遵守商业道德。在求名方面，有着成功的希望，更重要的是得到他人的赏识和栽培。婚姻方面，比卦预示着美好婚缘和彼此忠诚。总体而言，比卦提醒人们要心地善良，待人忠诚、厚道，乐于帮助他人，工作勤恳并善于判断是非，在交友选择上要谨慎，结交高明的朋友，会终身受益。\",\n",
      "  \"image\": \"比\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 坤卦\n",
      "Summary: 坤卦，源自《周易》的卦象之一，被视为大吉大利的卦象。它由两个坤卦叠加而成，代表着地、顺、牵引、接纳。在这个卦象中，大地承载万物，取法于地，以柔顺厚德来承担重大的责任。\n",
      "\n",
      "坤卦的核心哲学是：顺应天道，柔顺地德。君子观此卦象，以深厚的德行来承担重大的责任。预示着旅行者初时可能迷失方向，后来找到主人，吉利。在行事上，西南得朋，东北丧朋。此外，定居安贞也预示吉利。\n",
      "\n",
      "《断易天机》解释说：坤卦为地气舒展之象，具有纯阴之性，预示着宜往西南行，可得朋友。在南宋时期，易学家邵雍认为得此卦者，宜顺从运势，以静制动，不宜独立谋事，顺从他人，一起合作，可成大事。\n",
      "\n",
      "整体而言，坤卦暗示着诸事不宜急进，以静制动为宜。在事业、经商、求名、婚恋等方面都适宜顺从天道、柔顺和谦和的态度，方能取得吉祥的结果。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 乾卦\n",
      "Summary: 在周易中，乾卦是六十四卦之首，代表天，由六个阳爻构成，象征着刚健、健全、兴盛和强健。《象辞》中说：天道刚健，运行不已，君子观此卦象，应效法天道，不断自强。这一卦象暗示着大通而至正，但必须行正道，方可永远亨通。\n",
      "\n",
      "乾卦的核心哲学是：刚健旺盛，发育之功，完事顺利。得此卦者，宜把握机会，争取成果，但务须警惕过于刚直和骄傲。不仅如此，在事业、经商、求名、婚恋等方面，都需要坚持刚健、正直、公允的实质，修养德行，积累知识，坚定信念，自强不息，方能克服困难，取得成功。\n",
      "\n",
      "这一卦象预示着大吉大利，事业如日中天，但同时也提醒着人们必须警惕盛极必衰的道理，提高警惕，小心谨慎，冷静处世。只有如此，才能真正充分发挥才智，保证事业成功。\n"
     ]
    }
   ],
   "source": [
    "# 执行主函数\n",
    "main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7b2d3cb7-964f-4469-aae0-901328ea6df1",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "99ef5651-4b69-4370-ad5b-b479e042f336",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ebc37c6c-1728-48d5-8e0e-31362c2b5d79",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "ea12d689-c371-452b-b5e7-3b70a9b3d0b8",
   "metadata": {},
   "source": [
    "### 异常分析\n",
    "\n",
    "\n",
    "训练第一个 epoch 时，Training Loss 比较奇怪：\n",
    "\n",
    "```\n",
    "Step\tTraining Loss\n",
    "1\t3.594100\n",
    "2\t4.049100\n",
    "3\t3.091200\n",
    "4\t3.381700\n",
    "5\t3.547800\n",
    "6\t2.610200\n",
    "7\t2.657900\n",
    "8\t3.163900\n",
    "```\n",
    "\n",
    "通过解析 GPT-3.5-Turbo-1106 生成结果发现问题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "8408c88d-c81e-4f5f-837c-5d157dd1b37f",
   "metadata": {},
   "outputs": [],
   "source": [
    "def gen_data(raw_content):\n",
    "    \"\"\"\n",
    "    使用LangChain GPT-3.5调用处理单个数据样例。\n",
    "\n",
    "    :param raw_content: 原始数据样例。\n",
    "    :return: GPT-3.5模型生成的内容。\n",
    "    \"\"\"\n",
    "    # 系统消息定义背景和任务\n",
    "    system_message = SystemMessage(\n",
    "        content=\"\"\"\n",
    "        你是中国古典哲学大师，尤其擅长周易的哲学解读。\n",
    "\n",
    "        接下来，你收到的都是关于周易卦象的解释，你需要整理润色，并生成用于大模型训练的内容和格式。\n",
    "\n",
    "        示例输入：\n",
    "\n",
    "        师卦，此卦是异卦相叠，下卦为坎，上卦为坤。“师”指军队。坎为水、为险；坤为地、为顺，喻寓兵于农。兵凶战危，用兵乃圣人不得已而为之，但它可以顺利无阻碍地解决矛盾，因为顺乎形势，师出有名，故能化凶为吉。占得此卦，对于军事上率师出征非常有利，必无灾祸。师卦是天马出群之卦，以寡伏众之象。\n",
    "        师卦位于讼卦之后，《序卦》之中这样解释道：“讼必有众起，故受之以师。师者，众也。”争讼的人越来越多，以致形成了军队。\n",
    "\n",
    "        期待结果：\n",
    "\n",
    "        content:\"师卦\"\n",
    "        summary:\"在周易中，师卦是一个极具深意的卦象，它由两个异卦相叠组成：下卦坎（水）和上卦坤（地）。这一卦象代表“师”，即军队，寓意着兵力和农力的结合。在这里，坎卦象征着水和险难，而坤卦象征着地和顺从，暗示着通过将军事力量安置于民间，可以在必要时顺利调动。\n",
    "\n",
    "        师卦的核心哲学是：虽然兵力代表着危险和战争，但其使用应当是圣人不得已而为之的最后手段。在正确的情况下，军事力量可以顺应形势，将危险转化为吉祥。因此，在军事策略上，此卦象征着出征将会顺利，无灾祸。\n",
    "\n",
    "        师卦紧随讼卦（争讼卦），在《序卦》中解释为“讼必有众起，故受之以师”。这意味着争端激化至众多人群的参与，形成了类似军队的集体力量。\"\n",
    "\n",
    "        返回格式要求：\n",
    "        content:\"{卦名}\"\n",
    "        summary:\"{内容}\"\n",
    "        \"\"\"\n",
    "    )\n",
    "\n",
    "    # 人类消息包含原始数据样例\n",
    "    human_message = HumanMessage(\n",
    "        content=raw_content\n",
    "    )\n",
    "\n",
    "    # 构建消息列表并进行模型调用\n",
    "    messages = [system_message, human_message]\n",
    "    ai_message = chat(messages)\n",
    "\n",
    "    return ai_message.content"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "9fbb1ac5-0f0d-4dd8-ae4b-39227a606bf2",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 蒙卦\n",
      "Summary: 在周易中，蒙卦是一个充满着启蒙和通达意义的卦象。它由下卦坎（水）和上卦艮（山）组成，形象为山下有险。这象征着初时迷惑不知方向，须忍耐待机而动，凡事多听取别人意见，则运可通。蒙卦代表着混乱无序的情况下，需要勇敢坚毅的行动来扭转局面，同时也需要接受严格教育，培养奋发图强的精神，务必脚踏实地，杜绝好高骛远。在事业、经商、求名、婚恋等方面，蒙卦都提示着需要基础教育的重要性，同时也需要耐心等待适当时机，并接受长辈的教诲和严酷的考验。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 屯卦\n",
      "Summary: 在周易中，屯卦代表着大吉大利，它由下卦震（雷）上卦坎（水）组成。这一卦象象征着最初的困难和阻碍，但需要坚韧不拔的品性和果敢的行动才能取得吉祥。屯卦告诫着困境中需要勇往直前，小心翼翼，才可期待后续的顺利解决。\n",
      "\n",
      "根据《象辞》解释，屯卦的卦象是由上坎下震组成，坎象征云、震象征雷。这象征着云行于上，雷动于下，君子观此卦象，取法于云雷，以云的恩泽，雷的威严来治理国事。\n",
      "\n",
      "屯卦的解释中强调：身处困境时需要步步为营，有初难后解之象。事业上，积极进取、行动果断、勇往直前，灵活机动，可获得大的成功；同时需要他人相助。对于经商、求名、婚恋等方面，亦应坚忍不拔、积极追求，方可获得成功。然而，需要意识到困难状态下的需要得到贤德之人的帮助才能摆脱，以乐观主义精神处世，才能取得成就。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 需卦\n",
      "Summary: \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 讼卦\n",
      "Summary: 讼卦是一卦象，由乾上坎下组成。乾代表天，坎代表水，这两者相违相異，造成了讼卦的卦象。在讼卦中，提示人们要杜绝争讼，谋事之初必须慎之又慎。讼卦虽然有利可图，但必须警惕戒惧，中间吉利，终将带来凶险。讼卦出现时，有利于会见贵族王公，但不利于涉水渡河。这表明事业起初顺利，有利可图，继而受挫，需警惕慎之又慎，不得固执已见。避免介入诉讼纠纷的争执之中，采取退让的态度，求得化解，安于正理，可避免意外之灾。在事业、经商、求名、婚恋和决策等方面，讼卦都提示人们要警惕争讼之灾，慎之又慎，以谋始，以杜绝争讼为意。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 师卦\n",
      "Summary: 师卦是一个由坎卦（水）上卦坤卦（地）所组成的卦象，代表着军队总指挥的军情占卜，预示着没有灾祸。在这个卦象中，坤为地，坎为水，象征着地中有水，君子观此卦象则取法于大地容纳江河之象，用来比喻收容和滋养大众。根据《断易天机》解，师即兵众，只有选择德高望重的长者来统率军队，才能得到吉祥无咎。而根据北宋易学家邵雍解，得到此卦者会面临困难重重，需要包容别人，排除万难。师卦象征着养兵聚众，出师攻伐之象，但也暗示着困难重重，需要以正规行事，密切合作及严于律已，方能成功。在事业、经商、求名、婚恋和决策上都需要面对困难，但可通过灵活应对和坚定意志最终取得成功。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 比卦\n",
      "Summary: 在周易中，比卦是一个吉利的卦象。它代表着同时再次卜筮，仍然大吉大利，预示长期的吉祥而没有灾祸。然而，也暗示着不愿臣服的邦国迟迟不来者将会有难。\n",
      "\n",
      "比卦的核心哲学是：相亲相依，长期的亲密和宽容将带来吉祥。它反映了相亲相辅、亲密无间、和乐相处的道理。坎上坤下，水附大地，地纳河海，相互依赖，亲密无间，象征着和乐相处的意境。\n",
      "\n",
      "在运势、事业、经商、求名、婚恋等方面，比卦都预示着顺利成功，得到他人的帮助和辅佐。需要待人宽厚、正直、诚实、信任，在与他人的交往中讲究道德，遵守信义。同时，也需要警惕选择朋友，避免与品行不端的人结交，而应与高明之人友好往来，并获得其帮助。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 坤卦\n",
      "Summary: 坤卦是一个大吉大利的卦象，代表着柔顺、顺应天道、承载万物、伸展无穷的特性。坤卦的核心哲学是先迷失而后得到正确方向，因此在旅行中先迷后得，财物方面宜往西南。总体而言，坤卦代表安定、顺利和安宁。在事业上，需要以静制动，不宜急进，重视内心修养，容忍负重，以诚信和大度为原则。在经商方面，应稳健经营，遇挫折要总结经验，谨慎行事。在婚恋方面，适宜以柔克刚，以温柔待人，可得美好姻缘。在决策上，需要具备忠厚、温和的性格，待人真诚，可得到他人的帮助，但也要小心提防小人的伤害。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/root/miniconda3/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:189: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.\n",
      "  warn_deprecated(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content: 乾卦\n",
      "Summary: 乾卦是《易经》六十四卦之首，由六个阳爻组成，象征天，代表刚健、强健、大通的意义。在《象辞》中指出，天行健，君子应当以自强不息为行事准则。乾卦预示着吉祥如意，但需要行正道才能永远亨通。古代解卦家如邵雍和傅佩荣都认为得乾卦者宜自强不息，名利双收，但需谨慎过于刚直之嫌。在传统解卦中，乾卦预示着事业兴盛强健，但也提示了盛极必衰的道理，教诲人们谨慎小心，保持冷静谦和的态度，以保证事业成功。在经商、求名、婚恋等方面也提出了相应的建议，强调应修德养德，保持正直与公允，自强不息，才能克服困难，取得成功。\n"
     ]
    }
   ],
   "source": [
    "# 执行主函数\n",
    "main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "12e7bed4-7bc2-4e5f-83f1-e87f4ae679ab",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "afb64b98-cb37-4175-b591-358a5fd0abbc",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8b7dbb5c-37d6-45e1-911b-73d6971df914",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "caad2a63-377f-4d38-9053-4f3d00355e5c",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
